/**
 * 环境配置模块
 * 管理应用的环境变量和配置设置
 */
class EnvironmentConfig {
    constructor() {
        this.config = this._loadConfig();
        this._initEnvironment();
    }
    
    /**
     * 加载配置
     * @private
     * @returns {Object} 配置对象
     */
    _loadConfig() {
        // 默认配置
        const defaultConfig = {
            NODE_ENV: 'development',
            API_BASE_URL: 'http://localhost:3000',
            LOG_LEVEL: 'debug',
            ENABLE_MIGRATION: true,
            OFFLINE_MODE: false,
            DEBUG_MIGRATION: false
        };
        
        // 尝试从localStorage加载配置
        let savedConfig = {};
        try {
            const saved = localStorage.getItem('appConfig');
            if (saved) {
                savedConfig = JSON.parse(saved);
            }
        } catch (e) {
            console.error('加载配置失败:', e);
        }
        
        // 合并配置
        return { ...defaultConfig, ...savedConfig };
    }
    
    /**
     * 初始化环境设置
     * @private
     */
    _initEnvironment() {
        // 检查是否在生产环境
        if (this.isProduction()) {
            // 生产环境设置
            document.body.classList.add('production-env');
            this.config.LOG_LEVEL = 'warn';
            this.config.DEBUG_MIGRATION = false;
        } else {
            // 开发环境设置
            document.body.classList.add('development-env');
            this.config.LOG_LEVEL = 'debug';
        }
        
        // 保存配置到localStorage
        this.saveConfig();
    }
    
    /**
     * 保存配置到localStorage
     */
    saveConfig() {
        try {
            localStorage.setItem('appConfig', JSON.stringify(this.config));
        } catch (e) {
            console.error('保存配置失败:', e);
        }
    }
    
    /**
     * 获取配置值
     * @param {string} key - 配置键
     * @param {any} defaultValue - 默认值
     * @returns {any} 配置值
     */
    get(key, defaultValue = null) {
        return this.config[key] !== undefined ? this.config[key] : defaultValue;
    }
    
    /**
     * 设置配置值
     * @param {string} key - 配置键
     * @param {any} value - 配置值
     */
    set(key, value) {
        this.config[key] = value;
        this.saveConfig();
        
        // 特殊处理某些配置
        if (key === 'NODE_ENV') {
            this._initEnvironment(); // 重新初始化环境
        }
    }
    
    /**
     * 检查是否为开发环境
     * @returns {boolean} 是否为开发环境
     */
    isDevelopment() {
        return this.get('NODE_ENV') === 'development';
    }
    
    /**
     * 检查是否为生产环境
     * @returns {boolean} 是否为生产环境
     */
    isProduction() {
        return this.get('NODE_ENV') === 'production';
    }
    
    /**
     * 检查是否启用调试模式
     * @returns {boolean} 是否启用调试
     */
    isDebugEnabled() {
        return this.get('DEBUG_MIGRATION', false);
    }
    
    /**
     * 切换环境
     * @param {string} env - 环境名称 ('development' 或 'production')
     */
    switchEnvironment(env) {
        if (env === 'development' || env === 'production') {
            this.set('NODE_ENV', env);
            location.reload(); // 重新加载页面以应用新环境
        }
    }
    
    /**
     * 获取API基础URL
     * @returns {string} API基础URL
     */
    getApiBaseUrl() {
        return this.get('API_BASE_URL');
    }
    
    /**
     * 检查是否启用迁移
     * @returns {boolean} 是否启用迁移
     */
    isMigrationEnabled() {
        return this.get('ENABLE_MIGRATION', true);
    }
    
    /**
     * 检查是否为离线模式
     * @returns {boolean} 是否为离线模式
     */
    isOfflineMode() {
        return this.get('OFFLINE_MODE', false);
    }
    
    /**
     * 设置离线模式
     * @param {boolean} enabled - 是否启用离线模式
     */
    setOfflineMode(enabled) {
        this.set('OFFLINE_MODE', enabled);
    }
}

// 创建全局配置实例
const envConfig = new EnvironmentConfig();

// 导出配置
if (typeof module !== 'undefined' && module.exports) {
    module.exports = { envConfig, EnvironmentConfig };
} else {
    window.envConfig = envConfig;
    window.EnvironmentConfig = EnvironmentConfig;
}